package {
	
	import br.com.damazzy.manterReceita.AlterarReceita;
	import br.com.damazzy.manterReceita.DetalharReceita;
	import br.com.damazzy.manterReceita.ReceitaSelecaoView;
	import br.com.damazzy.util.TratamentoErros;
	import br.com.damazzy.vo.ReceitaVO;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.events.FlexEvent;
	import mx.managers.PopUpManager;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	public class ReceitaSelecao extends ReceitaSelecaoView {
		
		[Bindable]
		private var lista: ArrayCollection;
		private var _telaAplicacao: Aplicacao;
		
		public function ReceitaSelecao() {
			super();
			
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
			
			include 'br/com/damazzy/util/RegistroVOs.as';
		}
		
		private function init(event: FlexEvent): void {
			
			btnPesquisar.addEventListener(MouseEvent.CLICK, pesquisar);
			btnDetalhar.addEventListener(MouseEvent.CLICK, detalhar);
			grdReceitas.addEventListener(MouseEvent.DOUBLE_CLICK, detalhar);
			btnAlterar.addEventListener(MouseEvent.CLICK, alterar);
			btnFechar.addEventListener(MouseEvent.CLICK, _telaAplicacao.carregarTelaPrincipal);
			
			rm.pesquisar.addEventListener(ResultEvent.RESULT, resultPesquisar);
			rm.pesquisar.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			
			limparDados();
		}
		
		public function pesquisar(event: MouseEvent = null): void {
			var vo: ReceitaVO = new ReceitaVO();
			
			if (camposObrigatoriosPreenchidos()) {
				vo.dataVencimento = dtVencimento.dataFormatada;
			
				if (dtRecebimento.selectedDate != null) {
					vo.dataRecebimento = dtRecebimento.dataFormatada;
				}
				
				vo.valorReceita = isNaN(txtValorReceita.valor) || txtValorReceita.valor == 0 ? null : txtValorReceita.valor.toString();
				vo.valorPago = isNaN(txtValorPago.valor) || txtValorPago.valor == 0 ? null : txtValorPago.valor.toString();
				
				if (cbxReceitaExcluida.selectedIndex != 0) {
					vo.bolExcluida = cbxReceitaExcluida.selectedItem.valor;
				}
				
				if (cbxReceitaRecebida.selectedIndex != 0) {
					vo.receitaRecebida = cbxReceitaRecebida.selectedItem.valor;
				}
				
				rm.pesquisar(vo);
			}
		}
		
		private function camposObrigatoriosPreenchidos(): Boolean {
			var msg: String = "O campo ";
			var validacaoOk: Boolean = true;
			
			if (dtVencimento.selectedDate == null) {
				msg += "Data de Vencimento";
				validacaoOk = false;
			}
			
			msg += " é de preenchimento obrigatório.";
			
			if (!validacaoOk) {
				Alert.show(msg, "Erro!");
			}
			
			return validacaoOk;
		}
		
		private function resultPesquisar(event: ResultEvent): void {
			lista = event.result.dados.lista;
			grdReceitas.dataProvider = lista;
			
			if (lista.length == 0) {
				Alert.show("Não foi encontrada nenhuma receita pelo filtro informado.", "Aviso!");
			}
		}
		
		private function detalhar(event: MouseEvent): void {
			
			if (grdReceitas.selectedItem != null) {
				
				var detalhar: DetalharReceita = new DetalharReceita();
				PopUpManager.addPopUp(detalhar, this, true);
				PopUpManager.centerPopUp(detalhar);
				detalhar.popularDados(grdReceitas.selectedItem as ReceitaVO);
				
			} else {
				Alert.show("Selecione uma receita na lista para detalhar.", "Erro!");
			}
		}
		
		private function alterar(event: MouseEvent): void {
			
			if (grdReceitas.selectedItem != null) {
				
				var tmpVO: ReceitaVO = grdReceitas.selectedItem as ReceitaVO;
				var receitaRecebida: Number = new Number(tmpVO.receitaRecebida);
				
				if (tmpVO.bolExcluida == "false" && (receitaRecebida == ReceitaVO.RECEITA_NAO_RECEBIDA_CODIGO
					|| receitaRecebida == ReceitaVO.RECEITA_RECEBIDA_PARCIALMENTE_CODIGO)) {
					
					var alterar: AlterarReceita = new AlterarReceita();
					alterar.telaPai = this;
					PopUpManager.addPopUp(alterar, this, true);
					PopUpManager.centerPopUp(alterar);
					alterar.popularDados(tmpVO);
					
				} else if (tmpVO.bolExcluida == "true") {
					Alert.show("Esta receita está excluída e não pode ser alterada.", "Erro!");	
				} else {
					Alert.show("Esta receita já foi recebida e não pode ser alterada.", "Erro!");	
				}
				
			} else {
				Alert.show("Selecione uma receita na lista para alterar.", "Erro!");
			}
		}
		
		public function limparDados(event: Event = null): void {
			dtVencimento.selectedDate = new Date();
			dtRecebimento.selectedDate = null;
			
			lista = new ArrayCollection();
			grdReceitas.dataProvider = lista;
			
			cbxReceitaExcluida.selectedIndex = 0;
			cbxReceitaRecebida.selectedIndex = 0;
			txtValorPago.text = "";
			txtValorReceita.text = "";
		}
		
		public function set telaAplicacao(tela: Aplicacao): void {
			_telaAplicacao = tela;
		}
	}
}